<?php

namespace jueqi;

use Exception;
use Qcloud\Cos\Client;

/**
 * 腾讯云
 */
class QcloudCos
{
    /**
     * 简单上传
     * @param $fileInfo // 文件对象
     * @param string $fileName // 保存的文件路径以及文件名
     * @param string $msg // 错误信息
     * @return mixed
     */
    public function uploadFile($fileInfo, string $fileName = '', string &$msg = '')
    {
        if (empty($fileInfo)) {
            $msg = "上传文件为空！";
            return false;
        }
        if (empty($fileName)) {
            $msg = "保存路径不能为空！";
            return false;
        }
        $fileUrl = $fileName;
        $config  = get_sys_config("", 'cos');
        if (empty($config)) {
            $msg = "COS对象存储未配置！";
            return false;
        }
        // SECRETID 和 SECRETKEY 请登录访问管理控制台进行查看和管理
        $secretId  = $config['cos_secret_id'] ?? ''; //用户的 SecretId，建议使用子账号密钥，授权遵循最小权限指引，降低使用风险。子账号密钥获取可参考https://cloud.tencent.com/document/product/598/37140
        $secretKey = $config['cos_secret_key'] ?? ''; //用户的 SecretKey，建议使用子账号密钥，授权遵循最小权限指引，降低使用风险。子账号密钥获取可参考https://cloud.tencent.com/document/product/598/37140
        $region    = $config['cos_region'] ?? ''; //用户的 region，已创建桶归属的 region 可以在控制台查看，https://console.cloud.tencent.com/cos5/bucket
        $bucket    = $config['cos_bucket'] ?? ''; // 存储桶

        if (empty($secretId) || empty($secretKey) || empty($region) || empty($bucket)) {
            $msg = "COS对象存储配置错误或为空！";
            return false;
        }
        $cosClient = new Client(
            array(
                'region'      => $region,
                'credentials' => array(
                    'secretId'  => $secretId,
                    'secretKey' => $secretKey
                )
            )
        );
        try {
            $local_path = $fileInfo->openFile('rb'); // 打开文件
            return $cosClient->upload(
                $bucket, //存储桶名称，由BucketName-Appid 组成，可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucket
                $fileUrl, //此处的 key 为对象键
                $local_path
            );
        } catch (Exception $e) {
            $msg = $e->getMessage();
            // 请求失败
            return false;
        }
    }
}